
//Arduino头文件
#include <Arduino.h>

//硬件驱动
#include "HAL_Net.h"

/*
************************************************************
*   函数名称： HAL_Net_Init
*
*   函数功能： 初始化网络设备IO驱动层
*
*   入口参数： 无
*
*   返回参数： 无
*
*   说明：   底层的数据收发驱动
************************************************************
*/
void HAL_NET_CLASS::HAL_Net_Init(void)
{
    ;
}

/*
************************************************************
*   函数名称： HAL_Net_Init
*
*   函数功能： 初始化网络设备IO驱动层
*
*   入口参数： mode, 1:STA, 2:AP, 3:AP_STA
*
*   返回参数： 无
*
*   说明：   底层的数据收发驱动
************************************************************
*/
void HAL_NET_CLASS::HAL_Net_Set_Mode(unsigned char mode)
{
    switch (mode)
    {
    case 1:
        /* code */
        WiFi.mode(WIFI_STA);
        break;
    case 2:
        /* code */
        WiFi.mode(WIFI_AP);
        break;   
    case 3:
        /* code */
        WiFi.mode(WIFI_AP_STA);
        break;
    default:
        break;
    }
}

/*
************************************************************
*   函数名称： HAL_Net_Connect
*
*   函数功能： 连接WIFI热点
*
*   入口参数： 无
*
*   返回参数： 无
*
*   说明：   网络适配层连接驱动
************************************************************
*/
void HAL_NET_CLASS::HAL_Net_Connect(unsigned char *ssid, unsigned char * password)
{
  WiFi.begin(ssid, password);
}

/*
************************************************************
*   函数名称： HAL_Net_Get_Status
*
*   函数功能： 连接WIFI热点
*
*   入口参数： 无
*
*   返回参数： 无
*
*   说明：   网络适配层连接驱动
************************************************************
*/
int HAL_NET_CLASS::HAL_Net_Get_Status(void)
{
  return WiFi.status();
}

/*
************************************************************
*   函数名称： HAL_Net_Send
*
*   函数功能： 发送数据
*
*   入口参数： str：需要发送的数据
*              len：数据长度
*
*   返回参数： 无
*
*   说明：   底层的数据发送驱动
*
************************************************************
*/
void HAL_NET_CLASS::HAL_Net_Send(unsigned char *str, unsigned short len)
{

    Serial.write(str, len);
    Serial.flush();

}

/*
************************************************************
*   函数名称： HAL_Net_WaitRecive
*
*   函数功能： 等待接收完成
*
*   入口参数： 无
*
*   返回参数： REV_OK-接收完成   REV_WAIT-接收超时未完成
*
*   说明：   循环调用检测是否接收完成
************************************************************
*/
bool HAL_NET_CLASS::HAL_Net_WaitRecive(void)
{

    unsigned char count = 0;
        
    HAL_NET_CLASS::dataLen = Serial.available();
    if(HAL_NET_CLASS::dataLen == 0)
        return REV_WAIT;
        
    if(HAL_NET_CLASS::dataLen == HAL_NET_CLASS::dataLenPre)
    {
          for(; count < HAL_NET_CLASS::dataLen; count++)
              HAL_NET_CLASS::buf[count] = Serial.read();
              
          HAL_NET_CLASS::dataLen = 0;
          return REV_OK;
    }

    HAL_NET_CLASS::dataLenPre = HAL_NET_CLASS::dataLen;

    return REV_WAIT;

}

/*
************************************************************
*   函数名称： HAL_Net_ClearRecive
*
*   函数功能： 清空缓存
*
*   入口参数： 无
*
*   返回参数： 无
*
*   说明：     
************************************************************
*/
void HAL_NET_CLASS::HAL_Net_ClearRecive(void)
{

    HAL_NET_CLASS::dataLen = 0;
    memset(HAL_NET_CLASS::buf, 0, sizeof(HAL_NET_CLASS::buf));

}
